HPC 向けに最適化された AWS Graviton 3E 搭載の Hpc7g インスタンスが一般提供開始されました
HPC インスタンスタイプに AWS が開発する Arm プロセッサー「Graviton 3E」を搭載した新タイプ Hpc7g インスタンスの一般提供がはじまりました。
米国東部(バージニア北部)リージョンのみで利用可能です。
Hpc7g インスタンス、Graviton3E プロセッサを調べる機会がありましたので紹介します。
Hpc インスタンスタイプの歴史
AMD のプロセッサーを搭載した Hpc6a インスタンス、Intel のプロセッサーを搭載した Hpc6id インスタンスに次いでこの度 AWS の Arm プロセッサーを搭載した Hpc7g が発表されました。
Hpc7g の特徴としては以下の点が挙げられます。
- Graviton 3E プロセッサー搭載
- Hpc インスタンスタイプとしては初のインスタンスサイズ3種類提供、だけど料金単価は同じ
画像引用: AWS Graviton3E プロセッサ
Intel / AMD の Hpc インスタンスは、2 vCPU = 1 物理コア(Simultaneous Multi-Threading 有効)ではなく 1vCPU = 1 物理コアで提供されるのも特徴でした。
一方 Graviton インスタンスはもともと物理コア(1 vCPU = 1 物理コア)で提供されています。Hpc インスタンスでも同様ですので Graviton インスタンスの特徴がそのまま引き継がれています。
Graviton 3E プロセッサー
2022年の re:Invent で Graviton 3E のお披露目がありました。お披露目から半年経ち Graviton 3E を搭載したインスタンスとして、Hpc7g と C7gn が同日に提供開始となっています。
余談になりますが、あの有名なスパコンの富岳は富士通が設計した Arm アーキテクチャの A64FX プロセッサーが採用されています。その富岳で動作するアプリケーションを AWS 上でも動作させることを目指す Virtual Fugaku プロジェクトが動いています。AWS 上では同じく Arm アーキテクチャの Graviton 3/3E を搭載したインスタンスを使うことが想定されています。
『富岳』のクラウド化」と「クラウドの『富岳』化」を目指しています。前者は、「富岳」にクラウド基盤としての機能やインターフェースを追加し、クラウドのアプリケーションサービスを「富岳」上に実現したり、他のクラウドと連携して利用しやすくするもので、既に試行的に取り組んでいます。 引用: クラウドの「富岳」化(Virtual Fugaku)を目指します | 理化学研究所 計算科学研究センター(R-CCS)
Virtual Fugaku は今回提供開始された Hpc7g や c7gn インスタンスか、今後発表される新しいインスタンスタイプで動くのではないかと思われます。ワクワクする取り組みですね。
Graviton 性能比較
従来の Graviton プロセッサーと性能を比較した情報です。
- Graviton 3 と比べるとベクトル命令の処理性能が 35% 向上
- Graviton 2 と比べると、メモリ帯域幅、計算性能が軒並み向上
画像引用: 新しい Amazon EC2 C7gn インスタンス: Graviton3E プロセッサと最大 200 Gbps のネットワーク帯域幅 | Amazon Web Services ブログ
HPC 向けに最適化された Graviton 3 ベースのプロセッサーなので、浮動小数点演算、ベクトル演算に最適化されています。
画像引用: AWS-Black-Belt_2023_Amazon-Graviton_0430_v1.pdf
3種類のインスタンスサイズ
Intel / AMD の Hpc インスタンスは 1 種類のサイズ提供のみでした。Graviton の Hpc インスタンスでは、はじめて 3 種類のサイズが提供されています。
インスタンスサイズの違いは物理コア数だけですべて同じ料金単価という不思議なラインナップです。料金単価は Hpc7g.4xlarge, 8xlarge, 16xlarge すべて同一の $1.6832/時間です。※2023/6/30 現在
画像引用: Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
どうして?
インスタンスサイズのラインナップについては以下のブログで解説がされています。
- アプリケーションのライセンスコスト最適化のために、CPU コア数をカスタマイズしたかった
- メモリー集約型のワークロードのために、コア毎に十分な RAM とメモリー帯域幅を提供
CPU コア数依存のライセンス対策としてコストを削減するために、16 コア、32 コア、64 コアの提供ラインナップなのはユーザーにとってはありがたいですね。
メモリー集約型のワークロードについては、コア数が少ないほどメモリー帯域幅を広く利用できるため高パフォーマンスを期待できます。
実際に OpenFOAM のパフォーマンスの例が紹介されていました。緑のラインが 16 コアを過ぎたあたりから性能が横ばいになっています。これはメモリー帯域幅の制限によるものとのことです。つまり、コア数が増えてもメモリー帯域幅がボトルネックになり頭打ちになってしまうと。
画像引用: Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
起動してみる
Ubuntu 22.04 LTS の AMI(ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-arm64-server-20230516)を利用して、Hpc7g.16xlarge を起動します。
インスタンスタイプの提供状況下調べ
Hpc インスタンスは経験上、提供されているリージョンも限定的でかつ、インスタンスを起動できる AZ も少ないため先に起動可能な AZ を確認します。
ゾーン ID 確認
AZ のゾーン ID はuse1-az6
のみで提供されていました。
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.4xlarge --output table --------------------------------------------------------- | DescribeInstanceTypeOfferings | +-------------------------------------------------------+ || InstanceTypeOfferings || |+----------------+-----------+------------------------+| || InstanceType | Location | LocationType || |+----------------+-----------+------------------------+| || hpc7g.4xlarge | use1-az6 | availability-zone-id || |+----------------+-----------+------------------------+|
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.8xlarge --output table --------------------------------------------------------- | DescribeInstanceTypeOfferings | +-------------------------------------------------------+ || InstanceTypeOfferings || |+----------------+-----------+------------------------+| || InstanceType | Location | LocationType || |+----------------+-----------+------------------------+| || hpc7g.8xlarge | use1-az6 | availability-zone-id || |+----------------+-----------+------------------------+|
$ aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region us-east-1 --filters Name=instance-type,Values=hpc7g.16xlarge --output table ---------------------------------------------------------- | DescribeInstanceTypeOfferings | +--------------------------------------------------------+ || InstanceTypeOfferings || |+-----------------+-----------+------------------------+| || InstanceType | Location | LocationType || |+-----------------+-----------+------------------------+| || hpc7g.16xlarge | use1-az6 | availability-zone-id || |+-----------------+-----------+------------------------+|
ゾーン ID と ゾーンのマッピング確認
ゾーン ID (use1-az6
)とゾーンのマッピングを確認します。私のアカウントではus-east-1d
で起動できることがわかりました。
$ aws ec2 describe-availability-zones --region us-east-1 --query 'AvailabilityZones[*].{ZoneName:ZoneName, ZoneId:ZoneId}' --output table --------------------------------------- | DescribeAvailabilityZones | +----------------+--------------------+ | ZoneId | ZoneName | +----------------+--------------------+ | use1-az1 | us-east-1a | | use1-az2 | us-east-1b | | use1-az4 | us-east-1c | | use1-az6 | us-east-1d | | use1-az3 | us-east-1e | | use1-az5 | us-east-1f | | use1-iah1-az1 | us-east-1-iah-1a | +----------------+--------------------+
スポットインスタンスの提供確認
すべてオンデマンドインスタンスのみの提供でした。他の Hpc インスタンスタイプ同様にスポットインスタンスは提供されていませんでした。
$ aws ec2 describe-instance-types --instance-types hpc7g.4xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]' "on-demand" $ aws ec2 describe-instance-types --instance-types hpc7g.8xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]' "on-demand" $ aws ec2 describe-instance-types --instance-types hpc7g.16xlarge --region us-east-1 | jq '.InstanceTypes[].SupportedUsageClasses[]' "on-demand"
まとめ
私のアカウントではバージニア北部(us-east-1
)のus-east-1d
ゾーンで hpc7g インスタンスをオンデマンド起動できることがわかりました。
Hpc7g のハードウェアスペックを確認してみる
起動した Hpc7g にリモート接続してハードウェアスペックを確認してみます。
CPU 情報は 64 コアの Arm プロセッサーであることを確認できます。
$ lscpu Architecture: aarch64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 64 On-line CPU(s) list: 0-63 Vendor ID: ARM Model: 1 Thread(s) per core: 1 Core(s) per socket: 64 Socket(s): 1 Stepping: r1p1 BogoMIPS: 2100.00 Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm ssbs paca pacg dcpodp svei8mm svebf16 i8mm bf16 dgh rng Caches (sum of all): L1d: 4 MiB (64 instances) L1i: 4 MiB (64 instances) L2: 64 MiB (64 instances) L3: 32 MiB (1 instance) NUMA: NUMA node(s): 1 NUMA node0 CPU(s): 0-63 Vulnerabilities: Itlb multihit: Not affected L1tf: Not affected Mds: Not affected Meltdown: Not affected Mmio stale data: Not affected Retbleed: Not affected Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl Spectre v1: Mitigation; __user pointer sanitization Spectre v2: Mitigation; CSV2, BHB Srbds: Not affected Tsx async abort: Not affected
dmidecode
コマンドでメモリー情報を拾えると思ったのですがメモリー側が対応していないのか情報を確認できました。収穫は CPU が AWS Graviton 3E であるとハードウェア情報を拾えたくらいです。
$ sudo dmidecode # dmidecode 3.3 Getting SMBIOS data from sysfs. SMBIOS 3.0.0 present. Table at 0x7BEA0000. Handle 0x0000, DMI type 0, 24 bytes BIOS Information Vendor: Amazon EC2 Version: 1.0 Release Date: 11/1/2018 Address: 0xF0000 Runtime Size: 64 kB ROM Size: 64 kB Characteristics: PCI is supported EDD is supported ACPI is supported System is a virtual machine BIOS Revision: 1.0 Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: Amazon EC2 Product Name: hpc7g.16xlarge Version: Not Specified Serial Number: ec224297-aeb9-92dd-a6b7-9c95813729f8 UUID: ec224297-aeb9-92dd-a6b7-9c95813729f8 Wake-up Type: Power Switch SKU Number: Not Specified Family: Not Specified Handle 0x0002, DMI type 2, 15 bytes Base Board Information Manufacturer: Amazon EC2 Product Name: Not Specified Version: Not Specified Serial Number: Not Specified Asset Tag: i-0646df4c2ea0f5b9b Features: None Location In Chassis: Not Specified Chassis Handle: 0x0003 Type: Other Contained Object Handles: 0 Handle 0x0003, DMI type 3, 21 bytes Chassis Information Manufacturer: Amazon EC2 Type: Other Lock: Not Present Version: Not Specified Serial Number: Not Specified Asset Tag: Amazon EC2 Boot-up State: Safe Power Supply State: Safe Thermal State: Safe Security Status: None OEM Information: 0x00000000 Height: Unspecified Number Of Power Cords: 1 Contained Elements: 0 Handle 0x0004, DMI type 4, 42 bytes Processor Information Socket Designation: CPU00 Type: Central Processor Family: ARMv8 Manufacturer: AWS ID: 01 D4 1F 41 00 00 00 00 Signature: Implementor 0x41, Variant 0x1, Architecture 15, Part 0xd40, Revision 1 Version: AWS Graviton3E Voltage: Unknown External Clock: Unknown Max Speed: 2600 MHz Current Speed: 2600 MHz Status: Populated, Enabled Upgrade: None L1 Cache Handle: Not Provided L2 Cache Handle: Not Provided L3 Cache Handle: Not Provided Serial Number: AWS Graviton3E Asset Tag: AWS Graviton3E Part Number: AWS Graviton3E Core Count: 64 Core Enabled: 64 Thread Count: 64 Characteristics: None Handle 0xFEFF, DMI type 127, 4 bytes End Of Table
/proc/meminfo
からメモリーは 128 GB であることは確認できました。
MemTotal: 129545084 kB MemFree: 128372028 kB MemAvailable: 127740812 kB Buffers: 12660 kB Cached: 293688 kB SwapCached: 0 kB Active: 69088 kB Inactive: 345784 kB Active(anon): 888 kB Inactive(anon): 111320 kB Active(file): 68200 kB Inactive(file): 234464 kB Unevictable: 26192 kB Mlocked: 26192 kB SwapTotal: 0 kB SwapFree: 0 kB Zswap: 0 kB Zswapped: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 135176 kB Mapped: 103176 kB Shmem: 944 kB KReclaimable: 48416 kB Slab: 254128 kB SReclaimable: 48416 kB SUnreclaim: 205712 kB KernelStack: 13616 kB PageTables: 3852 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 64772540 kB Committed_AS: 1812000 kB VmallocTotal: 133143592960 kB VmallocUsed: 125200 kB VmallocChunk: 0 kB Percpu: 32256 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB
おわりに
以前、Graviton 2 を使った並列演算の例で OpenFOAM を使用したことがありました。Hpc インスタンスで改めて演算してみたいところです。計算するのは良いのですがブログ栄えするキャプチャとるために ParaView で可視化が苦手で二の足を踏んでしまいます。
参考
- AWS CLIで特定のEC2インスタンスタイプをサポートしているリージョンを確認するスクリプトを作成してみた | DevelopersIO
- アカウント間でアベイラビリティーゾーンをマッピングする | AWS re:Post
- Application deep-dive into the AWS Graviton3E-based Amazon EC2 Hpc7g instance | AWS HPC Blog
- Instance sizes in the Amazon EC2 Hpc7 family – a different experience | AWS HPC Blog
- dmidecodeを使わずにCPUやメモリ、マザーボードのベンダーや型番といった情報を取得する | 俺的備忘録 〜なんかいろいろ〜